# 线程: 是CPU的调度的基本单位
# 进程: 操作系统进行资源分配的基本单位.每打开一个程序至少有一个进程
# 每一个进程至少有一个线程, 这个线程就是我们通常说的主线程
# 一个进程默认有一个线程, 进程里面可以创建多个线程, 线程是依附在进程里的,没有进程就没有现成

import threading
import time

# Thread: 线程类
# target: 执行的任务名
# args: 以元组的方式给任务传参
# kwargs: 以字典的方式给任务传参
# name: 线程名


# 多线程
def sing(name: str):
    print(f"{name} Start Sing.....")
    time.sleep(2)
    print(f"{name} End Sing")


def dance(name: str):
    print(f"{name } Start dance")
    time.sleep(2)
    print(f"{name }End dance")


if __name__ == "__main__":
    t1 = threading.Thread(target=sing, args=("leslie",))
    t2 = threading.Thread(target=dance, args=("moon",))
    # 守护线程
    t1.start()
    t2.start()
    print(t1.__getattribute__("name"))
    print(t2.__getattribute__("name"))
    # 阻塞主线程,暂停,等待子线程结束后, 主程序才继续执行
    t1.join()
    t2.join()
    print("Perfect show.")
